M2.859 · Visualización de datos · PEC2
2024-2 · Máster universitario en Ciencia de datos (Data science)
Descripción:
El presente notebook se realiza para realizar una limpieza de datos del dataset Airline Data Project que se encuentra en https://www.kaggle.com/datasets/xan3011/airline-data-project-mit-1995-2019?select=airline_expenses.csv
El objetivo es generar un Waterfall Chart que nos permita identificar las Ganancias Acumuladas de la aerolinea Delta Airlines entre los años 2014 y 2016.
Acerca de Dataset:
Este conjunto de datos proviene del Proyecto de Datos de Línea Aérea establecido por el Programa de la Industria de Aeronaves Globales del MIT. Describe las métricas financieras para las aerolíneas individuales, los sectores de las aerolíneas y la industria en su conjunto para la industria de las aerolíneas comerciales estadounidenses. Los datos originales de la fuente se recopilan en el archivo zip "Datos MIT originales" y los datos relativos a las finanzas de Airline y las principales métricas de la industria se han limpiado y escrito en archivos csv para facilitar su uso.
import pandas as pd
import plotly.graph_objects as go
# Cargamos los datos desde 2 csv diferentes
revenues = pd.read_csv("airlines_revenues.csv")
expenses = pd.read_csv("airlines_expenses.csv")
# Seleccionamos la aerolínea y el rango de años
airline = 'Delta'
years = [2014, 2015, 2016]
# Unificamos revenue, expense y profit
df = pd.DataFrame()
df['Year'] = revenues['Year']
df['Revenue'] = revenues[airline]
df['Expense'] = expenses[airline]
df['Profit'] = df['Revenue'] - df['Expense']
df = df[df['Year'].isin(years)].reset_index(drop=True)
print(df)
Year Revenue Expense Profit 0 2014 4.042645e+10 3.750195e+10 2.924508e+09 1 2015 4.081577e+10 3.297111e+10 7.844653e+09 2 2016 3.984961e+10 3.287318e+10 6.976431e+09
# Obtener valores
profit_2014 = df[df['Year'] == 2014]['Profit'].values[0]
profit_2015 = df[df['Year'] == 2015]['Profit'].values[0]
profit_2016 = df[df['Year'] == 2016]['Profit'].values[0]
revenue_2015 = df[df['Year'] == 2015]['Revenue'].values[0]
expense_2015 = df[df['Year'] == 2015]['Expense'].values[0]
revenue_2016 = df[df['Year'] == 2016]['Revenue'].values[0]
expense_2016 = df[df['Year'] == 2016]['Expense'].values[0]
end_value = profit_2014 + profit_2015 + profit_2016
Creamos el Gráfico tipo Waterfall utilizando plotly.
# Crear gráfico con los valores
fig = go.Figure(go.Waterfall(
name = airline,
orientation = "v",
measure = [
"absolute", # Start
"relative", # Revenue 2015
"relative", # Expense 2015
"total", # Profit 2015 (usamos total para colorearlo azul)
"relative", # Revenue 2016
"relative", # Expense 2016
"total", # Profit 2016
"total" # End
],
x = [
"Start (2014)",
"2015 Revenue",
"2015 Expense",
"2015 Profit",
"2016 Revenue",
"2016 Expense",
"2016 Profit",
"End"
],
y = [
profit_2014,
revenue_2015,
-expense_2015,
profit_2015,
revenue_2016,
-expense_2016,
profit_2016,
end_value
],
textposition = "outside",
text = [
f"${v/1e9:.1f}B" for v in [
profit_2014, revenue_2015, -expense_2015, profit_2015,
revenue_2016, -expense_2016, profit_2016, end_value
]
],
increasing = {"marker":{"color":"lightgreen"}},
decreasing = {"marker":{"color":"red"}},
totals = {"marker":{"color":"blue"}}
))
fig.update_layout(
title = "Waterfall Chart - Delta (2015 y 2016)",
showlegend = False,
plot_bgcolor = "#f4f6f8"
)
fig.show()
# Creamos una lista (igual que en el gráfico) para exportarlo a flourish
steps = [
("Start (2014)", "absolute", profit_2014),
("2015 Revenue", "relative", revenue_2015),
("2015 Expense", "relative", -expense_2015),
("2015 Profit", "total", profit_2015),
("2016 Revenue", "relative", revenue_2016),
("2016 Expense", "relative", -expense_2016),
("2016 Profit", "total", profit_2016),
("End", "total", end_value)
]
# Convertimos en DataFrame
df_waterfall = pd.DataFrame(steps, columns=["Step", "Measure", "Value"])
df_waterfall["Formatted"] = df_waterfall["Value"].apply(lambda x: f"${x/1e9:.2f}B")
# Exportamos a CSV o Excel
df_waterfall.to_csv("waterfall_data_delta_2015_2016.csv", index=False)
Con el dataframe exportado a CSV en el archivo waterfall_data_delta_2015_2016.csv procedemos a generar el mapa en herramienta flourish. El cual se puede encontrar en: https://public.flourish.studio/visualisation/22431198/